<?php

class CampaniaClientesOwnerController extends AweController {

    /**
     * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
     * using two-column layout. See 'protected/views/layouts/column2.php'.
     */
    public $layout = '//layouts/column2';

    /**
     * Displays a particular model.
     * @param integer $id the ID of the model to be displayed
     */
    public function actionView($id) {
        $this->render('view', array(
            'model' => $this->loadModel($id),
        ));
    }

    /**
     * Creates a new model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     */
    public function actionCreate($id_campania = null) {
        $model = new CampaniaClientesOwner('search');
//        $modelCuenta = new Cuenta('search');
//        $modelCuenta->unsetAttributes(); // clear any default values
        $this->performAjaxValidation($model, 'campania-clientes-owner-form');
//        $result = array();
        $gruposCuentas = $model->searchCuentasCampaniasGrupos($id_campania);
        $gruposContactos = $model->searchContactoCampaniasGrupos($id_campania);
//        $cuentas = $modelCuenta->searchCuentaNoCampania($id_campania);
        $model->unsetAttributes(); // clear any default values

        if (Yii::app()->request->isAjaxRequest) {
            if (isset($_GET['search'])) {
                $model->attributes = $this->assignParams($_GET['search']);
            }

            $this->renderPartial('_form_modalCampaniaCuentas', array(
                'gruposCuentas' => $gruposCuentas,
//                'modelCuenta' => $modelCuenta,
                'gruposContactos' => $gruposContactos,
                'id_campania' => $id_campania,
                'model' => $model
                    ), false, true);
        }
    }

    public function assignParams($params) {
        $result = array();
        if ($params['filters'][0] == 'all') {
            foreach (CampaniaClientesOwner::model()->searchParams() as $param) {
                $result[$param] = $params['value'];
            }
        } else {
            foreach ($params['filters'] as $param) {
                $result[$param] = $params['value'];
            }
        }
        return $result;
    }

    /**
     * Updates a particular model.
     * If update is successful, the browser will be redirected to the 'view' page.
     * @param integer $id the ID of the model to be updated
     */
    public function actionUpdate($id) {
        $model = $this->loadModel($id);

        $this->performAjaxValidation($model, 'campania-clientes-owner-form');

        if (isset($_POST['CampaniaClientesOwner'])) {
            $model->attributes = $_POST['CampaniaClientesOwner'];
            if ($model->save()) {
                $this->redirect(array('admin'));
            }
        }

        $this->render('update', array(
            'model' => $model,
        ));
    }

    /**
     * Deletes a particular model.
     * If deletion is successful, the browser will be redirected to the 'admin' page.
     * @param integer $id the ID of the model to be deleted
     */
    public function actionDelete($id) {
        if (Yii::app()->request->isPostRequest) {
            // we only allow deletion via POST request
            //registrar la actividad de eliminacion de un usuario al quitarle de una cuenta en campaña


            $modelAct = $this->loadModel($id);
            $campania_id = $modelAct->campania_id;
            $eliminadoCliente = $modelAct->delete();

            /**
             * @author Miguel Alba <malba@tradesystem.com.ec>
             * Eliminar clientes de una campania primero verifica si fue eliminado para poder agregar esa actividad
             */
            if ($eliminadoCliente) {
                $campania = Campania::model()->findByPk($campania_id);
                Actividad::registrarActividad($campania, Actividad::TIPO_DELETE, Yii::app()->user->id, "cliente: " . $modelAct->cliente->nombre);
            }
            if (!isset($_GET['ajax']))
                $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
        } else
            throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
    }

    /**
     * Manages all models.
     */
    public function actionAdmin() {
        $model = new CampaniaClientesOwner('search');
        $model->unsetAttributes(); // clear any default values
        if (isset($_GET['CampaniaClientesOwner']))
            $model->attributes = $_GET['CampaniaClientesOwner'];

        $this->render('admin', array(
            'model' => $model,
        ));
    }

    /**
     * Returns the data model based on the primary key given in the GET variable.
     * If the data model is not found, an HTTP exception will be raised.
     * @param integer the ID of the model to be loaded
     */
    public function loadModel($id, $modelClass = __CLASS__) {
        $model = CampaniaClientesOwner::model()->findByPk($id);
        if ($model === null)
            throw new CHttpException(404, 'The requested page does not exist.');
        return $model;
    }

    /**
     * Performs the AJAX validation.
     * @param CModel the model to be validated
     */
    protected function performAjaxValidation($model, $form = null) {
        if (isset($_POST['ajax']) && $_POST['ajax'] === 'campania-clientes-owner-form') {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
    }

    /**
     * @author Miguel Alba <malba@tradesystem.com.ec>
     * 
     * Exportar a excel los clientes asignados a cada OPERADOR
     */
    public function actionExportExcel() {
        $modelContactos = array();
        $campania_id;
        $model = new CampaniaClientesOwner;
        if ($_POST['Contactos'] == 'todos') {

            $campania_id = $_POST['campania_id'];
            $modelContactos = $model->operadorContactosCampania($_POST['campania_id'], $_POST['operador_id']);
        } else {

            (array) $contactos = explode(',', $_POST['Contactos']); //arreglo de los ide d cada cliente del operador
            foreach ($contactos as $contacto) {

                $contactoOperador = $model->operadorContactosCampania($_POST['campania_id'], $_POST['operador_id'], $contacto);
                array_push($modelContactos, $contactoOperador['0']);
            }
            $campania_id = $_POST['campania_id'];
        }

        $objExcel = new PHPExcel();

        $objExcel->setActiveSheetIndex(0) // Titulo del reporte
                ->setCellValue('A1', 'Cedula/Documento')
                ->setCellValue('B1', 'Nombre Cliente')  //Titulo de las columnas
                ->setCellValue('C1', 'Cuenta')  //Titulo de las columnas
                ->setCellValue('D1', 'LLAMADAS')  //Titulo de las columnas
                ->setCellValue('E1', 'EMAILS')  //Titulo de las columnas
                ->setCellValue('F1', 'SMS');
        $id = 2;

        foreach ($modelContactos as $value) {



            $objExcel->setActiveSheetIndex(0)
                    ->setCellValue('A' . $id, $value['documento'])
                    ->setCellValue('B' . $id, $value['cliente_id'])
                    ->setCellValue('C' . $id, $value['nombre'] ? $value['nombre'] : '')
                    ->setCellValue('D' . $id, $value['cantidad_llamada'])//numLlamadaOperador
                    ->setCellValue('E' . $id, $value['cantidad_mail'])//numEmailOperador
                    ->setCellValue('F' . $id, $value['cantidad_sms'])
            ;
            $id++;
        }
        for ($i = 'A'; $i <= 'N'; $i++) {
            $objExcel->setActiveSheetIndex(0)->getColumnDimension($i)->setAutoSize(TRUE);
        }
        $objExcel->getActiveSheet()->setTitle('Contactos');

//// Se activa la hoja para que sea la que se muestre cuando el archivo se abre
        $objExcel->setActiveSheetIndex(0);
//
//// Inmovilizar paneles
        $objExcel->getActiveSheet(0)->freezePane('A4');
        $objExcel->getActiveSheet(0)->freezePaneByColumnAndRow(1, 2);
        // Se manda el archivo al navegador web, con el nombre que se indica, en formato 2007
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename="ReporteContactos.xlsx"');
        header('Cache-Control: max-age=0');

        $objWriter = PHPExcel_IOFactory::createWriter($objExcel, 'Excel2007');
        $objWriter->save('php://output');
        exit;
    }

    /*     * *****************funciones ajax************************************************* */

    /**
     * @author Alex Yepez <ayepez@tradesystem.com.ec>
     * retorna un json de las acciones de la campaña
     * @param type $campania_id
     */
    public function actionAjaxGetAcciones($campania_id) {
        if (Yii::app()->request->isAjaxRequest) {
            $model = Campania::model()->findByPk($campania_id);
            if ($model->permitirBotonesFecha()) {
                $result = CampaniaAccion::model()->getAccionesCampania($campania_id);
            } else {
                $result = array();
            }
            echo CJSON::encode($result);
        }
    }

    /**
     * @author Alex Yepez <ayepez@tradesystem.com.ec>
     * accion para la asignacion manual de clientes.
     */
    public function actionAjaxAsignarOperador() {
        $result = array();
        if (Yii::app()->request->isAjaxRequest) {
            if (isset($_POST['campania_id'])) {
                $countOperadores = CampaniaUsuarioCruge::model()->count('campania_id = :campania_id', array(':campania_id' => $_POST['campania_id']));
                if ($countOperadores > 0) {
                    $result['success'] = true;
                    $model = new CampaniaClientesOwner();
                    $model->clienteOwnerId = is_array($_POST['selected']) ? implode($_POST['selected'], ',') : $_POST['selected'];
                    $model->campania_id = $_POST['campania_id'];
                    $result['html'] = $this->renderPartial('_update_cuenta_campania', array('model' => $model), true, true);
                } else {
                    $result['success'] = false;
                    $result['error'] = 'La campaña no tiene operadores asignado';
                }
            } else if (isset($_POST['CampaniaClientesOwner'])) {
                $operador = $_POST['CampaniaClientesOwner']['owner_id'];
                $clientes = $_POST['CampaniaClientesOwner']['clienteOwnerId'];
                $campania_id = $_POST['CampaniaClientesOwner']['campania_id'];
                if ($clientes == 'all') {
                    $rowsUpdate = CampaniaClientesOwner::model()->count('campania_id=:campania_id ', array('campania_id' => $campania_id));
                    $resultRows = CampaniaClientesOwner::model()->updateAll(array('owner_id' => $operador), 'campania_id=:campania_id', array(':campania_id' => $campania_id));
                    $result['success'] = $rowsUpdate == $resultRows ? true : false;
                } else {
                    $clientes = explode(',', $clientes);
                    $resultRows = CampaniaClientesOwner::model()->updateByPk($clientes, array('owner_id' => $operador));
                    $result['success'] = count($clientes) == $resultRows ? true : false;
                }
            }
            echo CJSON::encode($result);
        }
    }

    public function actionUpdateCuentaCampania($id = null) {
        if (Yii::app()->request->isAjaxRequest) {
            $visiblepartial = true;
            $model = CampaniaClientesOwner::model()->findByPk($id);
            if (isset($_POST['CampaniaClienteOwner'])) {
                $result = array();
                $datos = $_POST['CampaniaClienteOwner'];
                if ($datos['auto']) {
                    $Operadores = CampaniaUsuarioCruge::model()->getUsersCampania($model->campania_id, Constants::ROL_OPERADOR);
                    $id_user = !empty($Operadores) ? $Operadores[0]['iduser'] : 0;
                    $model->owner_id = $id_user;
                } else {
                    $model->owner_id = $datos['id_user_ope'];
                }
                $result['success'] = $model->save();
                if ($result['success']) {
                    echo json_encode($result);
                } else {
                    $result['success'] = false;
                    echo json_encode($result);
                }
                $visiblepartial = false;
            }
            if ($visiblepartial) {
                $this->renderPartial('_update_cuenta_campania', array(
                    'model' => $model
                        ), false, true);
            }
        }
    }

    public function actionAjaxAgregarCuentaOperador() {
        if (Yii::app()->request->isAjaxRequest) {
            $result['success'] = TRUE;
            $id_campania = $_POST['campania_id'];
            $limitIni = 0;
            //seteo de cantidad de datos a consultar
            $limitfin = Constants::BATCH_ENTITY_NUMBER;
            //carga de cuentas segun grupos y campaña por lotes
            $cuentas = CampaniaClientesOwner::model()->getCuentasSinOperador($id_campania, $limitIni, $limitfin);
            while (!empty($cuentas)) {
                foreach ($cuentas as $cuenta) {
                    //carga de usuarios operadores 
                    $Operadores = CampaniaUsuarioCruge::model()->getUsersCampania($id_campania, Constants::ROL_OPERADOR);
                    $campania_owner = CampaniaClientesOwner::model()->findByPk($cuenta['id']);
                    //asignar cuenta al usuario con menos cuentas asignadas
                    $campania_owner->owner_id = !empty($Operadores) ? $Operadores[0]["iduser"] : 0;
                    $result['success'] = $result['success'] && $campania_owner->save();
                }
                //carga de el siguiente lote
                $cuentas = CampaniaClientesOwner::model()->getCuentasSinOperador($id_campania, $limitIni, $limitfin);
            }
            if ($result['success']) {
                echo json_encode($result);
            } else {
                $result['success'] = false;
                $result['error'] = 'Hubo problemas al asignar operadores.';
                echo json_encode($result);
            }
        }
    }

    /**
     * 
     * @param type $param
     */
    public function actionCreateContactoCampania() {
        if (Yii::app()->request->isAjaxRequest) {
            $result['success'] = TRUE;
            if (isset($_POST['Campania'])) {
                //cargar usuarios operadores de 
                $id_cuentas = $_POST['Campania']['selecteds']['Cuentas'];
                $id_campania = $_POST['Campania']['id_campania'];
                foreach ($id_cuentas as $key => $id_cuenta) {
                    $modelCampania = new CampaniaClientesOwner;
                    $modelCampania->campania_id = $id_campania;
                    $modelCampania->cliente_id = $id_cuenta;
                    $Operadores = CampaniaUsuarioCruge::model()->getUsersCampania($id_campania, Constants::ROL_OPERADOR);
                    $id_user = !empty($Operadores) ? $Operadores[0]['iduser'] : 0;
                    $modelCampania->owner_id = $id_user;
                    $result['success'] = $result['success'] && $modelCampania->save();
                }

                if ($result['success']) {
                    $campania = Campania::model()->findByPk($id_campania);
                    $detalle = "Clientes";
                    Actividad::registrarActividad($campania, Actividad::TIPO_CREATE, NULL, $detalle);
                    echo json_encode($result);
                } else {
                    $result['success'] = false;
                    echo json_encode($result);
                }
            }
        }
    }

    /**
     * 
     * @param type $param
     */
    public function actionCreateGrupoCampania() {
        if (Yii::app()->request->isAjaxRequest) {
            $result['success'] = TRUE;
            if (isset($_POST['Campania'])) {
                $id_grupos = $_POST['Campania']['selecteds'];
                $id_campania = $_POST['Campania']['id_campania'];
                $id_grupos_cuenta = isset($id_grupos['Gruposcuenta']) ? $id_grupos['Gruposcuenta'] : array();
                $id_grupos_contacto = isset($id_grupos['Gruposcontacto']) ? $id_grupos['Gruposcontacto'] : array();
                //seteo de limite inicia
                $limitIni = 0;
                //seteo de cantidad de datos a consultar
                $limitfin = Constants::BATCH_ENTITY_NUMBER;
                //carga de cuentas segun grupos y campaña por lotes
                $cuentasGrupo = CampaniaClientesOwner::model()->getContactosGrupoLotes(implode(',', $id_grupos_cuenta), implode(',', $id_grupos_contacto), $id_campania, $limitIni, $limitfin);

                while (!empty($cuentasGrupo)) {
                    foreach ($cuentasGrupo as $cuenta) {
                        //carga de usuarios operadores 
                        $Operadores = CampaniaUsuarioCruge::model()->getUsersCampania($id_campania, Constants::ROL_OPERADOR);
                        $campania_owner = new CampaniaClientesOwner;
                        //asignar cuenta al usuario con menos cuentas asignadas
                        $campania_owner->owner_id = !empty($Operadores) ? $Operadores[0]["iduser"] : 0;
                        $campania_owner->campania_id = $id_campania;
                        $campania_owner->cliente_id = $cuenta['id'];
                        $result['success'] = $result['success'] && $campania_owner->save();
                    }
                    //carga de el siguiente lote
                    $cuentasGrupo = CampaniaClientesOwner::model()->getContactosGrupoLotes(implode(',', $id_grupos_cuenta), implode(',', $id_grupos_contacto), $id_campania, $limitIni, $limitfin);
                }
                if ($result['success']) {
                    echo json_encode($result);
                } else {
                    $result['success'] = false;
                    echo json_encode($result);
                }
            }
        }
    }

}
